package com.ktjiaoyu.controller;

import com.ktjiaoyu.entity.SysUser;
import com.ktjiaoyu.ex.LoginException;
import com.ktjiaoyu.service.SysUserService;
import com.ktjiaoyu.utils.Constants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class LoginController extends BaseController {
    @Autowired
    private SysUserService sysUserService;


    @GetMapping("/login")
    public String toLogin() {
        //由于login.jsp页面不在WEB-INF下,所以不能返回逻辑视图名称
        //需要使用forward:前缀告知springMVC转发到根路径下的login.jsp
        return forward("/login.jsp");
    }

    @PostMapping("/login")
    public String login(@RequestParam("account") String account, @RequestParam("password") String password) {
        SysUser loginUser = sysUserService.login(account, password);
        if (loginUser != null) {
            //登录成功，将用户信息保存到session中
            session(Constants.SESSION_USER, loginUser);
            //重定向到后台首页
            return redirect("/main/index");
        } else {
            //设置错误信息到request中
//            throw new RuntimeException("登录失败,用户名或密码错误");
            throw new LoginException("登录失败,用户名或密码错误");
//            session(Constants.REQUSET_ERROR, "用户名或密码错误");
//            return forward("/login.jsp");
        }
    }

    //跳转到后台首页
    @GetMapping("/main/index")
    public String toIndex() {
        return "index";
    }

    //点击注销按钮，清除session中的登录信息
    @GetMapping("/logout")
    public String logout() {
        session().invalidate(); //注销后清除session中的所有信息
        return redirect("/login.jsp");
    }

//    @GetMapping("/ex")
//    public void throwException() {
//        throw new RuntimeException("测试不同异常映射到不同的页面");
//    }

    //局部异常处理
//    @ExceptionHandler(value = RuntimeException.class)
//    public String handlerException(RuntimeException e, HttpServletRequest request) {
//        request.setAttribute(Constants.REQUSET_ERROR, e);
//        return "500";
//    }
}
